5089. Словарь

 

Петр решил составить толковый словарь речи орков. Он последовательно подходил к n оркам, каждый говорил ему слово по-орочьи, и Петр записывал это слово. Определений к словам Петр решил не писать: все равно каждый орк знает их значение. Таким образом, все, что Вам осталось (Петру эта затея уже надоела) – отсортировать список слов в лексикографическом порядке.

 

Вход. В первой строке находится число слов n (1 ≤ n ≤ 100). В следующих n строках находятся слова орочьего языка, состоящие только из больших букв. Длины слов не превышают 100.

 

Выход. Выведите готовый словарь Петра – n орочьих слов в лексикографическом порядке.

 

Пример входа

Пример выхода

3

AB

A

AA

A

AA

AB

 

 

РЕШЕНИЕ

структуры данных – set

 

Анализ алгоритма

Занесем все слова во множество строк. После чего выведем их в лексикографическом порядке.

 

Реализация алгоритма

Объявим множество строк s.

 

set<string> s;

 

Читаем количество слов n.

 

cin >> n;

 

Читаем слова и заносим их во множество s.

 

for (i = 0; i < n; i++)

{

  cin >> str;

  s.insert(str);

}

 

Выводим слова в лексикографическом порядке.

 

for (string str : s)

  cout << str << endl;

 

Реализация алгоритма – swap sort

 

#include <stdio.h>

#include <string.h>

#include <malloc.h>

 

char s[100][101];

char str[101];

int i, j, n, len;

 

int main(void)

{

  scanf("%d\n", &n);

  for (i = 0; i < n; i++)

  {

    gets_s(str);

    strcpy(s[i], str);

  }

 

  for (i = 0; i < n; i++)

  for (j = i + 1; j < n; j++)

    if (strcmp(s[i], s[j]) > 0)

    {

      strcpy(str, s[i]);

      strcpy(s[i], s[j]);

      strcpy(s[j], str);

    }

 

  for (i = 0; i < n; i++)

    puts(s[i]);

  return 0;

}

 

Реализация алгоритма – swap sort, string

 

#include <iostream>

#include <string>

#include <vector>

using namespace std;

 

vector<string> s;

string str;

int i, j, n, len;

 

int main(void)

{

  cin >> n;

  for (i = 0; i < n; i++)

  {

    cin >> str;

    s.push_back(str);

  }

 

  for (i = 0; i < n; i++)

  for (j = i + 1; j < n; j++)

    if (s[i] > s[j])

    {

      str = s[i];

      s[i] = s[j];

      s[j] = str;

    }

 

  for (i = 0; i < n; i++)

    cout << s[i] << endl;

  return 0;

}

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static void main(String []args)

  {

    Scanner con = new Scanner(System.in);

    TreeSet<String> s = new TreeSet<String>();

    int n = con.nextInt();

    for(int i = 0; i < n; i++)

      s.add(con.next());

 

    for(String st : s)

      System.out.println(st);

    con.close();

  }

}